#ifndef _FENGINE_EXCEPTION
#define _FENGINE_EXCEPTION

#include <string>

namespace FEngine
{
	/**
	 * Custom exception send by the FEngine.
	 */
	class FEngineException
	{

		public:

			/**
			 * Constructor.
			 * @param _class Name of the Class in which the error occured.
			 * @param _method Name of the method in which the error occured.
			 * @param _info Optional custom message describing the error.
			 */
			FEngineException(const std::string& _class, const std::string& _method, const std::string& _info = "");
			~FEngineException();
			
			/**
			 * Get the full error message.
			 * @return String containing the whole error message.
			 */
			std::string getMessage() const;
			
			/**
			 * Get the name of the Class in which the error occured.
			 * @return String containing the Class name.
			 */
			std::string getClassName() const;
			
			/**
			 * Get the name of the method in which the error occured.
			 * @return String containing the method name.
			 */
			std::string getMethodName() const;
			
			/**
			 * Get the name of the inforomation of the error.
			 * @return String containing the informations about the error.
			 */
			std::string getInformation() const;


		private:
			
			std::string mMessage;
			std::string mClassName;
			std::string mMethodName;
			std::string mInfo;
	};
}

#endif
